package com.le.tester.book.effectivejava3rdchinese.articleeightyfour;

/**
 * createTime：2022/10/11 13:53
 * description：个人感觉应该是活性的线程才应该让他时刻处于检查一个共享对象的状态，
 * 那么如果开一个线程之后，只是让他大部分的时间处在等待的状态，那么消耗大于产出了
 * 不要依赖于线程的调度性，这样的代码并没有可移植性和健壮性
 */
public class SlowCountDownLatch {
    //1.count 并没有使用volatile
    private int count;

    public SlowCountDownLatch(int count) {
        if (count < 0) {
            throw new IllegalArgumentException(count + "<0");
        }
        this.count = count;
    }

    //依然的使用同步锁
    public void await() {
        while (true) {
            synchronized (this) {
                if (count == 0)
                    return;
            }
        }
    }

    //使用自减来达到倒计时的目的
    public synchronized void countDown() {
        if (count != 0) {
            count--;
        }
    }
}
